package com.huawei.cloud.phone.management.domain.connection;

import com.huawei.cloud.phone.management.domain.phone.Phone;
import org.springframework.lang.NonNull;

import java.util.List;
import java.util.Optional;

public interface ConnectionGateway {
    /**
     * 添加连接
     *
     * @param connection 连接信息
     * @return 是否添加成功
     */
    boolean addConnection(@NonNull Connection connection);

    /**
     * 修改连接状态
     *
     * @param connection 连接信息
     * @return 是否修改成功
     */
    boolean updateConnection(@NonNull Connection connection);

    /**
     * 修改连接状态
     *
     * @param connectionId 连接Id
     * @param origin       原连接状态
     * @param target       新连接状态
     * @return 是否修改成功
     */
    boolean updateStatus(@NonNull String connectionId, @NonNull ConnectionStatus origin, @NonNull ConnectionStatus target);

    /**
     * 通过用户手机ID获取对应的连接信息
     *
     * @param userPhoneId 用户手机ID
     * @return 连接信息
     */
    Optional<Connection> getConnection(@NonNull String userPhoneId);

    /**
     * 通过云手机ID获取对应的连接信息
     *
     * @param phoneId 云手机ID
     * @return 连接信息
     */
    Optional<Connection> getConnectionByPhoneId(@NonNull String phoneId);

    /**
     * 删除用户手机ID对应的连接
     *
     * @param userPhoneId 用户手机ID
     */
    void deleteConnection(@NonNull String userPhoneId);

    /**
     * 获取所有正在使用中的手机
     *
     * @return 正在使用中的手机
     */
    List<Phone> getAllUsingPhones();

    /**
     * 维护异常的连接状态
     *
     * @param origin 原来状态
     * @param target 目标状态
     * @return 异常连接数
     */
    int maintainStatus(@NonNull ConnectionStatus origin, @NonNull ConnectionStatus target);
}
